/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package controladores;

import io.Caso;
import io.Intervencion;
import io.IntervencionAdiccion;
import io.IntervencionComun;
import io.TipoLlamado;
import io.TipoMotivo;
import java.util.ArrayList;
import java.util.Date;
import java.util.Iterator;
import java.util.List;

/**
 *
 * @author NiCo
 */
public class ControladorEstadisticas {

    private List<Caso> listaCasos(Date fecha) {
        List<Caso> lista = null;
        ControladorPrincipal.getInstance().getEntity().getTransaction().begin();
        try {
            lista = ControladorPrincipal.getInstance().getEntity().createNativeQuery("SELECT * FROM CASO WHERE fecha = '" + fecha + "'", Caso.class).getResultList();
            ControladorPrincipal.getInstance().getEntity().getTransaction().commit();
        } catch (Exception e) {
            ControladorPrincipal.getInstance().getEntity().getTransaction().rollback();
        }
        return lista;
    }

    private List<Intervencion> listaIntervenciones(Date fecha) {
        List<Intervencion> lista = null;
        ControladorPrincipal.getInstance().getEntity().getTransaction().begin();
        try {
            lista = ControladorPrincipal.getInstance().getEntity().createNativeQuery("SELECT * FROM INTERVENCION WHERE fecha = '" + fecha + "'", Intervencion.class).getResultList();
            ControladorPrincipal.getInstance().getEntity().getTransaction().commit();
        } catch (Exception e) {
            ControladorPrincipal.getInstance().getEntity().getTransaction().rollback();
        }
        return lista;
    }

    public List<Integer> tipoCasos(Date fecha) {
        List<Integer> resultado = null;
        List<Caso> casos = listaCasos(fecha);
        if (!casos.isEmpty()) {
            Iterator<Caso> it = casos.iterator();
            resultado = new ArrayList<Integer>();
            int tel = 0;
            int guardia = 0;
            int espontanea = 0;
            while (it.hasNext()) {
                Caso caso = it.next();
                if (caso.getTipoCaso() != null) {
                    if (caso.getTipoCaso() == TipoLlamado.LLAMADO) {
                        tel++;
                    } else {
                        if (caso.getTipoCaso() == TipoLlamado.GUARDIA_TELEFONICA) {
                            guardia++;
                        } else {
                            if (caso.getTipoCaso() == TipoLlamado.PRESENTACION_ESPONTANEA) {
                                espontanea++;
                            }
                        }
                    }
                }
            }
            resultado.add(tel);
            resultado.add(guardia);
            resultado.add(espontanea);
        }
        return resultado;
    }

    public List<Integer> intervenciones(Date fecha) {
        List<Integer> resultado = null;
        List<Intervencion> inter = listaIntervenciones(fecha);
        if (!inter.isEmpty()) {
            Iterator<Intervencion> it = inter.iterator();
            resultado = new ArrayList<Integer>();
            int tot = inter.size();
            int violencia = 0;
            int adiccion = 0;
            while (it.hasNext()) {
                Intervencion interv = it.next();
                try {
                    IntervencionComun com = (IntervencionComun) interv;
                    violencia++;
                } catch (Exception e) {
                }
                try {
                    IntervencionAdiccion com = (IntervencionAdiccion) interv;
                    adiccion++;
                } catch (Exception e) {
                }
            }
            resultado.add(tot);
            resultado.add(violencia);
            resultado.add(adiccion);
        }
        return resultado;
    }

    public List<Object[]> derivadosFecha(Date fecha) {
        List<Object[]> lista = null;
        ControladorPrincipal.getInstance().getEntity().getTransaction().begin();
        try {
            lista = ControladorPrincipal.getInstance().getEntity().createNativeQuery("SELECT institucionderivado, count(tipocaso) FROM CASO WHERE tipocaso = 2 AND fecha = '" + fecha + "' GROUP BY institucionderivado;").getResultList();
            ControladorPrincipal.getInstance().getEntity().getTransaction().commit();
        } catch (Exception e) {
            ControladorPrincipal.getInstance().getEntity().getTransaction().rollback();
        }
        return lista;
    }

    public List<Object[]> derivadosPeriodo(Date inicio, Date fin) {
        List<Object[]> lista = null;
        ControladorPrincipal.getInstance().getEntity().getTransaction().begin();
        try {
            lista = ControladorPrincipal.getInstance().getEntity().createNativeQuery("SELECT institucionderivado, count(tipocaso) FROM CASO WHERE tipocaso = 2 AND fecha BETWEEN '" + inicio + "' AND '" + fin + "' GROUP BY institucionderivado;").getResultList();
            ControladorPrincipal.getInstance().getEntity().getTransaction().commit();
        } catch (Exception e) {
            ControladorPrincipal.getInstance().getEntity().getTransaction().rollback();
        }
        return lista;
    }

    public List<Integer> motivoDiario(Date fecha) {
        List<Integer> lista = null;
        List<Caso> aux = listaCasos(fecha);
        Iterator<Caso> it = aux.iterator();
        int ayuda = 0;
        int violencia = 0;
        int adictiva = 0;
        int problemas = 0;
        int desercion = 0;
        int trabajo = 0;
        int calle = 0;
        int otros = 0;
        while (it.hasNext()) {
            Caso caso = it.next();
            if (lista == null) {
                lista = new ArrayList<Integer>();
            }
            if (caso.getMotivo() == TipoMotivo.LEGAL || caso.getMotivo() == TipoMotivo.PSICOLOGICA) {
                ayuda++;
            } else {
                if (caso.getMotivo() == TipoMotivo.MALTRATO || caso.getMotivo() == TipoMotivo.ABANDONO || caso.getMotivo() == TipoMotivo.ABUSO_SEXUAL || caso.getMotivo() == TipoMotivo.TESTIGO_VIOLENCIA) {
                    violencia++;
                } else {
                    if (caso.getMotivo() == TipoMotivo.CONDUCTAS_ADICTIVAS) {
                        adictiva++;
                    } else {
                        if (caso.getMotivo() == TipoMotivo.PROBLEMAS_CONDUCTA) {
                            problemas++;
                        } else {
                            if (caso.getMotivo() == TipoMotivo.DESERCION_ESCOLAR) {
                                desercion++;
                            } else {
                                if (caso.getMotivo() == TipoMotivo.TRABAJO_INFANTIL) {
                                    trabajo++;
                                } else {
                                    if (caso.getMotivo() == TipoMotivo.SITUACION_CALLE) {
                                        calle++;
                                    } else {
                                        if (caso.getMotivo() == TipoMotivo.OTROS) {
                                            otros++;
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
        if (lista != null) {
            lista.add(ayuda);
            lista.add(violencia);
            lista.add(adictiva);
            lista.add(problemas);
            lista.add(desercion);
            lista.add(trabajo);
            lista.add(calle);
            lista.add(otros);
        }
        return lista;
    }

    public List<Integer> motivoMensual(int mes, int anio) {
        List<Integer> lista = null;
        List<Caso> aux = listaCasosMes(mes, anio);
        Iterator<Caso> it = aux.iterator();
        int ayuda = 0;
        int violencia = 0;
        int adictiva = 0;
        int problemas = 0;
        int desercion = 0;
        int trabajo = 0;
        int calle = 0;
        int otros = 0;
        while (it.hasNext()) {
            Caso caso = it.next();
            if (lista == null) {
                lista = new ArrayList<Integer>();

            }
            if (caso.getMotivo() == TipoMotivo.LEGAL || caso.getMotivo() == TipoMotivo.PSICOLOGICA) {
                ayuda++;
            } else {
                if (caso.getMotivo() == TipoMotivo.MALTRATO || caso.getMotivo() == TipoMotivo.ABANDONO || caso.getMotivo() == TipoMotivo.ABUSO_SEXUAL || caso.getMotivo() == TipoMotivo.TESTIGO_VIOLENCIA) {
                    violencia++;
                } else {
                    if (caso.getMotivo() == TipoMotivo.CONDUCTAS_ADICTIVAS) {
                        adictiva++;
                    } else {
                        if (caso.getMotivo() == TipoMotivo.PROBLEMAS_CONDUCTA) {
                            problemas++;
                        } else {
                            if (caso.getMotivo() == TipoMotivo.DESERCION_ESCOLAR) {
                                desercion++;
                            } else {
                                if (caso.getMotivo() == TipoMotivo.TRABAJO_INFANTIL) {
                                    trabajo++;
                                } else {
                                    if (caso.getMotivo() == TipoMotivo.SITUACION_CALLE) {
                                        calle++;
                                    } else {
                                        if (caso.getMotivo() == TipoMotivo.OTROS) {
                                            otros++;
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
        if (lista != null) {
            lista.add(ayuda);
            lista.add(violencia);
            lista.add(adictiva);
            lista.add(problemas);
            lista.add(desercion);
            lista.add(trabajo);
            lista.add(calle);
            lista.add(otros);
        }
        return lista;
    }

    private List<Caso> listaCasosMes(int mes, int anio) {
        List<Caso> lista = null;
        ControladorPrincipal.getInstance().getEntity().getTransaction().begin();
        try {
            lista = ControladorPrincipal.getInstance().getEntity().createNativeQuery("SELECT * FROM CASO WHERE date_part('month', fecha) = " + mes + "AND date_part('year', fecha) = " + anio, Caso.class).getResultList();
            ControladorPrincipal.getInstance().getEntity().getTransaction().commit();
        } catch (Exception e) {
            ControladorPrincipal.getInstance().getEntity().getTransaction().rollback();
        }
        return lista;
    }

    public List<Integer> motivoAnual(int anio) {
        List<Integer> lista = null;
        List<Caso> aux = listaCasosAnio(anio);
        Iterator<Caso> it = aux.iterator();
        int ayuda = 0;
        int violencia = 0;
        int adictiva = 0;
        int problemas = 0;
        int desercion = 0;
        int trabajo = 0;
        int calle = 0;
        int otros = 0;
        while (it.hasNext()) {
            Caso caso = it.next();
            if (lista == null) {
                lista = new ArrayList<Integer>();
            }
            if (caso.getMotivo() == TipoMotivo.LEGAL || caso.getMotivo() == TipoMotivo.PSICOLOGICA) {
                ayuda++;
            } else {
                if (caso.getMotivo() == TipoMotivo.MALTRATO || caso.getMotivo() == TipoMotivo.ABANDONO || caso.getMotivo() == TipoMotivo.ABUSO_SEXUAL || caso.getMotivo() == TipoMotivo.TESTIGO_VIOLENCIA) {
                    violencia++;
                } else {
                    if (caso.getMotivo() == TipoMotivo.CONDUCTAS_ADICTIVAS) {
                        adictiva++;
                    } else {
                        if (caso.getMotivo() == TipoMotivo.PROBLEMAS_CONDUCTA) {
                            problemas++;
                        } else {
                            if (caso.getMotivo() == TipoMotivo.DESERCION_ESCOLAR) {
                                desercion++;
                            } else {
                                if (caso.getMotivo() == TipoMotivo.TRABAJO_INFANTIL) {
                                    trabajo++;
                                } else {
                                    if (caso.getMotivo() == TipoMotivo.SITUACION_CALLE) {
                                        calle++;
                                    } else {
                                        if (caso.getMotivo() == TipoMotivo.OTROS) {
                                            otros++;
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
        if (lista != null) {
            lista.add(ayuda);
            lista.add(violencia);
            lista.add(adictiva);
            lista.add(problemas);
            lista.add(desercion);
            lista.add(trabajo);
            lista.add(calle);
            lista.add(otros);
        }
        return lista;
    }

    private List<Caso> listaCasosAnio(int anio) {
        List<Caso> lista = null;
        ControladorPrincipal.getInstance().getEntity().getTransaction().begin();
        try {
            lista = ControladorPrincipal.getInstance().getEntity().createNativeQuery("SELECT * FROM CASO WHERE date_part('year', fecha) = " + anio, Caso.class).getResultList();
            ControladorPrincipal.getInstance().getEntity().getTransaction().commit();
        } catch (Exception e) {
            ControladorPrincipal.getInstance().getEntity().getTransaction().rollback();
        }
        return lista;
    }

    public List<Integer> motivoTrimestre(int trimestre, int anio) {
        List<Integer> lista = null;
        List<Caso> aux = null;
        if (trimestre == 0) {
            aux = listaCasosMes(1, anio);
            aux.addAll(listaCasosMes(2, anio));
            aux.addAll(listaCasosMes(3, anio));
        } else {
            if (trimestre == 1) {
                aux = listaCasosMes(4, anio);
                aux.addAll(listaCasosMes(5, anio));
                aux.addAll(listaCasosMes(6, anio));
            } else {
                if (trimestre == 2) {
                    aux = listaCasosMes(7, anio);
                    aux.addAll(listaCasosMes(8, anio));
                    aux.addAll(listaCasosMes(9, anio));
                } else {
                    if (trimestre == 3) {
                        aux = listaCasosMes(10, anio);
                        aux.addAll(listaCasosMes(11, anio));
                        aux.addAll(listaCasosMes(12, anio));
                    }
                }
            }
        }
        Iterator<Caso> it = aux.iterator();
        int ayuda = 0;
        int violencia = 0;
        int adictiva = 0;
        int problemas = 0;
        int desercion = 0;
        int trabajo = 0;
        int calle = 0;
        int otros = 0;


        while (it.hasNext()) {
            Caso caso = it.next();
            if (lista == null) {
                lista = new ArrayList<Integer>();
            }
            if (caso.getMotivo() == TipoMotivo.LEGAL || caso.getMotivo() == TipoMotivo.PSICOLOGICA) {
                ayuda++;
            } else {
                if (caso.getMotivo() == TipoMotivo.MALTRATO || caso.getMotivo() == TipoMotivo.ABANDONO || caso.getMotivo() == TipoMotivo.ABUSO_SEXUAL || caso.getMotivo() == TipoMotivo.TESTIGO_VIOLENCIA) {
                    violencia++;
                } else {
                    if (caso.getMotivo() == TipoMotivo.CONDUCTAS_ADICTIVAS) {
                        adictiva++;
                    } else {
                        if (caso.getMotivo() == TipoMotivo.PROBLEMAS_CONDUCTA) {
                            problemas++;
                        } else {
                            if (caso.getMotivo() == TipoMotivo.DESERCION_ESCOLAR) {
                                desercion++;
                            } else {
                                if (caso.getMotivo() == TipoMotivo.TRABAJO_INFANTIL) {
                                    trabajo++;
                                } else {
                                    if (caso.getMotivo() == TipoMotivo.SITUACION_CALLE) {
                                        calle++;
                                    } else {
                                        if (caso.getMotivo() == TipoMotivo.OTROS) {
                                            otros++;
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }

        if (lista
                != null) {
            lista.add(ayuda);
            lista.add(violencia);
            lista.add(adictiva);
            lista.add(problemas);
            lista.add(desercion);
            lista.add(trabajo);
            lista.add(calle);
            lista.add(otros);
        }

        return lista;
    }

    public List<List<Integer>> motivoLlamadoDiario(Date fecha) {
        List<List<Integer>> lista = null;
        List<List<Integer>> listaAux = new ArrayList<List<Integer>>();
        boolean existe = false;
        for (int i = 0; i <= 2; i++) {
            List<Caso> aux = listaLlamadoCasos(fecha, i);
            Iterator<Caso> it = aux.iterator();
            List<Integer> valores = new ArrayList<Integer>();
            int ayuda = 0;
            int violencia = 0;
            int adictiva = 0;
            int problemas = 0;
            int desercion = 0;
            int trabajo = 0;
            int calle = 0;
            int otros = 0;
            while (it.hasNext()) {
                Caso caso = it.next();
                if (caso.getMotivo() == TipoMotivo.LEGAL || caso.getMotivo() == TipoMotivo.PSICOLOGICA) {
                    ayuda++;
                } else {
                    if (caso.getMotivo() == TipoMotivo.MALTRATO || caso.getMotivo() == TipoMotivo.ABANDONO || caso.getMotivo() == TipoMotivo.ABUSO_SEXUAL || caso.getMotivo() == TipoMotivo.TESTIGO_VIOLENCIA) {
                        violencia++;
                    } else {
                        if (caso.getMotivo() == TipoMotivo.CONDUCTAS_ADICTIVAS) {
                            adictiva++;
                        } else {
                            if (caso.getMotivo() == TipoMotivo.PROBLEMAS_CONDUCTA) {
                                problemas++;
                            } else {
                                if (caso.getMotivo() == TipoMotivo.DESERCION_ESCOLAR) {
                                    desercion++;
                                } else {
                                    if (caso.getMotivo() == TipoMotivo.TRABAJO_INFANTIL) {
                                        trabajo++;
                                    } else {
                                        if (caso.getMotivo() == TipoMotivo.SITUACION_CALLE) {
                                            calle++;
                                        } else {
                                            if (caso.getMotivo() == TipoMotivo.OTROS) {
                                                otros++;
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
            valores.add(ayuda);
            valores.add(violencia);
            valores.add(adictiva);
            valores.add(problemas);
            valores.add(desercion);
            valores.add(trabajo);
            valores.add(calle);
            valores.add(otros);
            listaAux.add(valores);
            if (!aux.isEmpty()) {
                existe = true;
            }
        }
        if (existe) {
            lista = listaAux;
        }
        return lista;
    }

    private List<Caso> listaLlamadoCasos(Date fecha, int llamado) {
        List<Caso> lista = null;
        ControladorPrincipal.getInstance().getEntity().getTransaction().begin();
        try {
            lista = ControladorPrincipal.getInstance().getEntity().createNativeQuery("SELECT * FROM CASO WHERE fecha = '" + fecha + "' AND tipocaso = " + llamado, Caso.class).getResultList();
            ControladorPrincipal.getInstance().getEntity().getTransaction().commit();
        } catch (Exception e) {
            ControladorPrincipal.getInstance().getEntity().getTransaction().rollback();
        }
        return lista;
    }

    public List<List<Integer>> motivoLlamadoMensual(int mes, int anio) {
        List<List<Integer>> lista = null;
        List<List<Integer>> listaAux = new ArrayList<List<Integer>>();
        boolean existe = false;
        for (int i = 0; i <= 2; i++) {
            List<Caso> aux = listaLlamadoCasosMes(mes, anio, i);
            Iterator<Caso> it = aux.iterator();
            List<Integer> valores = new ArrayList<Integer>();
            int ayuda = 0;
            int violencia = 0;
            int adictiva = 0;
            int problemas = 0;
            int desercion = 0;
            int trabajo = 0;
            int calle = 0;
            int otros = 0;
            while (it.hasNext()) {
                Caso caso = it.next();
                if (caso.getMotivo() == TipoMotivo.LEGAL || caso.getMotivo() == TipoMotivo.PSICOLOGICA) {
                    ayuda++;
                } else {
                    if (caso.getMotivo() == TipoMotivo.MALTRATO || caso.getMotivo() == TipoMotivo.ABANDONO || caso.getMotivo() == TipoMotivo.ABUSO_SEXUAL || caso.getMotivo() == TipoMotivo.TESTIGO_VIOLENCIA) {
                        violencia++;
                    } else {
                        if (caso.getMotivo() == TipoMotivo.CONDUCTAS_ADICTIVAS) {
                            adictiva++;
                        } else {
                            if (caso.getMotivo() == TipoMotivo.PROBLEMAS_CONDUCTA) {
                                problemas++;
                            } else {
                                if (caso.getMotivo() == TipoMotivo.DESERCION_ESCOLAR) {
                                    desercion++;
                                } else {
                                    if (caso.getMotivo() == TipoMotivo.TRABAJO_INFANTIL) {
                                        trabajo++;
                                    } else {
                                        if (caso.getMotivo() == TipoMotivo.SITUACION_CALLE) {
                                            calle++;
                                        } else {
                                            if (caso.getMotivo() == TipoMotivo.OTROS) {
                                                otros++;
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
            valores.add(ayuda);
            valores.add(violencia);
            valores.add(adictiva);
            valores.add(problemas);
            valores.add(desercion);
            valores.add(trabajo);
            valores.add(calle);
            valores.add(otros);
            listaAux.add(valores);
            if (!aux.isEmpty()) {
                existe = true;
            }
        }
        if (existe) {
            lista = listaAux;
        }
        return lista;
    }

    private List<Caso> listaLlamadoCasosMes(int mes, int anio, int llamado) {
        List<Caso> lista = null;
        ControladorPrincipal.getInstance().getEntity().getTransaction().begin();
        try {
            lista = ControladorPrincipal.getInstance().getEntity().createNativeQuery("SELECT * FROM CASO WHERE date_part('month', fecha) = " + mes + "AND date_part('year', fecha) = " + anio + "AND tipocaso = " + llamado, Caso.class).getResultList();
            ControladorPrincipal.getInstance().getEntity().getTransaction().commit();
        } catch (Exception e) {
            ControladorPrincipal.getInstance().getEntity().getTransaction().rollback();
        }
        return lista;
    }

    public List<List<Integer>> motivoLlamadoTrimestre(int trimestre, int anio) {
        List<List<Integer>> lista = null;
        List<List<Integer>> listaAux = new ArrayList<List<Integer>>();
        boolean existe = false;
        for (int i = 0; i <= 2; i++) {
            List<Caso> aux = null;
            if (trimestre == 0) {
                aux = listaLlamadoCasosMes(1, anio, i);
                aux.addAll(listaLlamadoCasosMes(2, anio, i));
                aux.addAll(listaLlamadoCasosMes(3, anio, i));
            } else {
                if (trimestre == 1) {
                    aux = listaLlamadoCasosMes(4, anio, i);
                    aux.addAll(listaLlamadoCasosMes(5, anio, i));
                    aux.addAll(listaLlamadoCasosMes(6, anio, i));
                } else {
                    if (trimestre == 2) {
                        aux = listaLlamadoCasosMes(7, anio, i);
                        aux.addAll(listaLlamadoCasosMes(8, anio, i));
                        aux.addAll(listaLlamadoCasosMes(9, anio, i));
                    } else {
                        if (trimestre == 3) {
                            aux = listaLlamadoCasosMes(10, anio, i);
                            aux.addAll(listaLlamadoCasosMes(11, anio, i));
                            aux.addAll(listaLlamadoCasosMes(12, anio, i));
                        }
                    }
                }
            }
            Iterator<Caso> it = aux.iterator();
            List<Integer> valores = new ArrayList<Integer>();
            int ayuda = 0;
            int violencia = 0;
            int adictiva = 0;
            int problemas = 0;
            int desercion = 0;
            int trabajo = 0;
            int calle = 0;
            int otros = 0;
            while (it.hasNext()) {
                Caso caso = it.next();
                if (caso.getMotivo() == TipoMotivo.LEGAL || caso.getMotivo() == TipoMotivo.PSICOLOGICA) {
                    ayuda++;
                } else {
                    if (caso.getMotivo() == TipoMotivo.MALTRATO || caso.getMotivo() == TipoMotivo.ABANDONO || caso.getMotivo() == TipoMotivo.ABUSO_SEXUAL || caso.getMotivo() == TipoMotivo.TESTIGO_VIOLENCIA) {
                        violencia++;
                    } else {
                        if (caso.getMotivo() == TipoMotivo.CONDUCTAS_ADICTIVAS) {
                            adictiva++;
                        } else {
                            if (caso.getMotivo() == TipoMotivo.PROBLEMAS_CONDUCTA) {
                                problemas++;
                            } else {
                                if (caso.getMotivo() == TipoMotivo.DESERCION_ESCOLAR) {
                                    desercion++;
                                } else {
                                    if (caso.getMotivo() == TipoMotivo.TRABAJO_INFANTIL) {
                                        trabajo++;
                                    } else {
                                        if (caso.getMotivo() == TipoMotivo.SITUACION_CALLE) {
                                            calle++;
                                        } else {
                                            if (caso.getMotivo() == TipoMotivo.OTROS) {
                                                otros++;
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
            valores.add(ayuda);
            valores.add(violencia);
            valores.add(adictiva);
            valores.add(problemas);
            valores.add(desercion);
            valores.add(trabajo);
            valores.add(calle);
            valores.add(otros);
            listaAux.add(valores);
            if (!aux.isEmpty()) {
                existe = true;
            }
        }
        if (existe) {
            lista = listaAux;
        }
        return lista;
    }

    public List<List<Integer>> motivoLlamadoAnual(int anio) {
        List<List<Integer>> lista = null;
        List<List<Integer>> listaAux = new ArrayList<List<Integer>>();
        boolean existe = false;
        for (int i = 0; i <= 2; i++) {
            List<Caso> aux = listaLlamadoCasosAnio(anio, i);
            Iterator<Caso> it = aux.iterator();
            List<Integer> valores = new ArrayList<Integer>();
            int ayuda = 0;
            int violencia = 0;
            int adictiva = 0;
            int problemas = 0;
            int desercion = 0;
            int trabajo = 0;
            int calle = 0;
            int otros = 0;
            while (it.hasNext()) {
                Caso caso = it.next();
                if (caso.getMotivo() == TipoMotivo.LEGAL || caso.getMotivo() == TipoMotivo.PSICOLOGICA) {
                    ayuda++;
                } else {
                    if (caso.getMotivo() == TipoMotivo.MALTRATO || caso.getMotivo() == TipoMotivo.ABANDONO || caso.getMotivo() == TipoMotivo.ABUSO_SEXUAL || caso.getMotivo() == TipoMotivo.TESTIGO_VIOLENCIA) {
                        violencia++;
                    } else {
                        if (caso.getMotivo() == TipoMotivo.CONDUCTAS_ADICTIVAS) {
                            adictiva++;
                        } else {
                            if (caso.getMotivo() == TipoMotivo.PROBLEMAS_CONDUCTA) {
                                problemas++;
                            } else {
                                if (caso.getMotivo() == TipoMotivo.DESERCION_ESCOLAR) {
                                    desercion++;
                                } else {
                                    if (caso.getMotivo() == TipoMotivo.TRABAJO_INFANTIL) {
                                        trabajo++;
                                    } else {
                                        if (caso.getMotivo() == TipoMotivo.SITUACION_CALLE) {
                                            calle++;
                                        } else {
                                            if (caso.getMotivo() == TipoMotivo.OTROS) {
                                                otros++;
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
            valores.add(ayuda);
            valores.add(violencia);
            valores.add(adictiva);
            valores.add(problemas);
            valores.add(desercion);
            valores.add(trabajo);
            valores.add(calle);
            valores.add(otros);
            listaAux.add(valores);
            if (!aux.isEmpty()) {
                existe = true;
            }
        }
        if (existe) {
            lista = listaAux;
        }
        return lista;
    }

    private List<Caso> listaLlamadoCasosAnio(int anio, int llamado) {
        List<Caso> lista = null;
        ControladorPrincipal.getInstance().getEntity().getTransaction().begin();
        try {
            lista = ControladorPrincipal.getInstance().getEntity().createNativeQuery("SELECT * FROM CASO WHERE date_part('year', fecha) = " + anio + " AND tipocaso = " + llamado, Caso.class).getResultList();
            ControladorPrincipal.getInstance().getEntity().getTransaction().commit();
        } catch (Exception e) {
            ControladorPrincipal.getInstance().getEntity().getTransaction().rollback();
        }
        return lista;
    }

    public List<Object[]> edadFecha(Date fecha) {
        List<Object[]> lista = null;
        ControladorPrincipal.getInstance().getEntity().getTransaction().begin();
        try {
            lista = ControladorPrincipal.getInstance().getEntity().createNativeQuery("SELECT edad, count(*) FROM caso, nino_adolescente WHERE caso.nino_adolescente_id = nino_adolescente.id AND fecha = '" + fecha + "' GROUP BY edad ORDER BY edad ASC").getResultList();
            ControladorPrincipal.getInstance().getEntity().getTransaction().commit();
        } catch (Exception e) {
            ControladorPrincipal.getInstance().getEntity().getTransaction().rollback();
        }
        return lista;
    }

    public List<Object[]> edadPeriodo(Date inicio, Date fin) {
        List<Object[]> lista = null;
        ControladorPrincipal.getInstance().getEntity().getTransaction().begin();
        try {
            lista = ControladorPrincipal.getInstance().getEntity().createNativeQuery("SELECT edad, count(*) FROM caso, nino_adolescente WHERE caso.nino_adolescente_id = nino_adolescente.id AND fecha BETWEEN '" + inicio + "' AND '" + fin + "' GROUP BY edad ORDER BY edad ASC").getResultList();
            ControladorPrincipal.getInstance().getEntity().getTransaction().commit();
        } catch (Exception e) {
            ControladorPrincipal.getInstance().getEntity().getTransaction().rollback();
        }
        return lista;
    }

    public List<Object[]> sexoFecha(Date fecha) {
        List<Object[]> lista = null;
        ControladorPrincipal.getInstance().getEntity().getTransaction().begin();
        try {
            lista = ControladorPrincipal.getInstance().getEntity().createNativeQuery("SELECT sexo, count(*) FROM caso, nino_adolescente WHERE caso.nino_adolescente_id = nino_adolescente.id AND fecha = '" + fecha + "' GROUP BY sexo ORDER BY sexo ASC").getResultList();
            Iterator<Object[]> it = lista.iterator();
            while (it.hasNext()) {
                Object[] obj = it.next();
                if (Integer.parseInt(obj[0].toString()) == 0) {
                    obj[0] = "Masculino";
                } else {
                    if (Integer.parseInt(obj[0].toString()) == 1) {
                        obj[0] = "Femenino";
                    }
                }
            }
            ControladorPrincipal.getInstance().getEntity().getTransaction().commit();
        } catch (Exception e) {
            ControladorPrincipal.getInstance().getEntity().getTransaction().rollback();
        }
        return lista;
    }

    public List<Object[]> sexoPeriodo(Date inicio, Date fin) {
        List<Object[]> lista = null;
        ControladorPrincipal.getInstance().getEntity().getTransaction().begin();
        try {
            lista = ControladorPrincipal.getInstance().getEntity().createNativeQuery("SELECT sexo, count(*) FROM caso, nino_adolescente WHERE caso.nino_adolescente_id = nino_adolescente.id AND fecha BETWEEN '" + inicio + "' AND '" + fin + "' GROUP BY sexo ORDER BY sexo ASC").getResultList();
            Iterator<Object[]> it = lista.iterator();
            while (it.hasNext()) {
                Object[] obj = it.next();
                if (Integer.parseInt(obj[0].toString()) == 0) {
                    obj[0] = "Masculino";
                } else {
                    if (Integer.parseInt(obj[0].toString()) == 1) {
                        obj[0] = "Femenino";
                    }
                }
            }
            ControladorPrincipal.getInstance().getEntity().getTransaction().commit();
        } catch (Exception e) {
            ControladorPrincipal.getInstance().getEntity().getTransaction().rollback();
        }
        return lista;
    }

    public List<Object[]> composicionFecha(Date fecha) {
        List<Object[]> lista = null;
        ControladorPrincipal.getInstance().getEntity().getTransaction().begin();
        try {
            lista = ControladorPrincipal.getInstance().getEntity().createNativeQuery("SELECT composicionfamiliar, count(*) FROM (SELECT DISTINCT composicionfamiliar, caso_numerocaso FROM intervencion) AS a, caso WHERE a.caso_numerocaso = caso.numerocaso AND fecha = '" + fecha + "' GROUP BY composicionfamiliar ORDER BY composicionfamiliar ASC").getResultList();
            Iterator<Object[]> it = lista.iterator();
            while (it.hasNext()) {
                Object[] obj = it.next();
                if (Integer.parseInt(obj[0].toString()) == 0) {
                    obj[0] = "Separado";
                } else {
                    if (Integer.parseInt(obj[0].toString()) == 1) {
                        obj[0] = "Casado / Concubinato";
                    } else {
                        if (Integer.parseInt(obj[0].toString()) == 2) {
                            obj[0] = "Familia de origen";
                        } else {
                            if (Integer.parseInt(obj[0].toString()) == 3) {
                                obj[0] = "Hijos";
                            } else {
                                if (Integer.parseInt(obj[0].toString()) == 4) {
                                    obj[0] = "Ensamblado";
                                } else {
                                    if (Integer.parseInt(obj[0].toString()) == 5) {
                                        obj[0] = "Sustituto";
                                    } else {
                                        if (Integer.parseInt(obj[0].toString()) == 6) {
                                            obj[0] = "Nuclear";
                                        } else {
                                            if (Integer.parseInt(obj[0].toString()) == 7) {
                                                obj[0] = "Padre único";
                                            } else {
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
            ControladorPrincipal.getInstance().getEntity().getTransaction().commit();
        } catch (Exception e) {
            ControladorPrincipal.getInstance().getEntity().getTransaction().rollback();
        }
        return lista;
    }

    public List<Object[]> composicionPeriodo(Date inicio, Date fin) {
        List<Object[]> lista = null;
        ControladorPrincipal.getInstance().getEntity().getTransaction().begin();
        try {
            lista = ControladorPrincipal.getInstance().getEntity().createNativeQuery("SELECT composicionfamiliar, count(*) FROM (SELECT DISTINCT composicionfamiliar, caso_numerocaso FROM intervencion) AS a, caso WHERE a.caso_numerocaso = caso.numerocaso AND fecha BETWEEN '" + inicio + "' AND '" + fin + "' GROUP BY composicionfamiliar ORDER BY composicionfamiliar ASC").getResultList();
            Iterator<Object[]> it = lista.iterator();
            while (it.hasNext()) {
                Object[] obj = it.next();
                if (Integer.parseInt(obj[0].toString()) == 0) {
                    obj[0] = "Separado";
                } else {
                    if (Integer.parseInt(obj[0].toString()) == 1) {
                        obj[0] = "Casado / Concubinato";
                    } else {
                        if (Integer.parseInt(obj[0].toString()) == 2) {
                            obj[0] = "Familia de origen";
                        } else {
                            if (Integer.parseInt(obj[0].toString()) == 3) {
                                obj[0] = "Hijos";
                            } else {
                                if (Integer.parseInt(obj[0].toString()) == 4) {
                                    obj[0] = "Ensamblado";
                                } else {
                                    if (Integer.parseInt(obj[0].toString()) == 5) {
                                        obj[0] = "Sustituto";
                                    } else {
                                        if (Integer.parseInt(obj[0].toString()) == 6) {
                                            obj[0] = "Nuclear";
                                        } else {
                                            if (Integer.parseInt(obj[0].toString()) == 7) {
                                                obj[0] = "Padre único";
                                            } else {
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
            ControladorPrincipal.getInstance().getEntity().getTransaction().commit();
        } catch (Exception e) {
            ControladorPrincipal.getInstance().getEntity().getTransaction().rollback();
        }
        return lista;
    }

    public List<Object[]> situacionFecha(Date fecha) {
        List<Object[]> lista = null;
        ControladorPrincipal.getInstance().getEntity().getTransaction().begin();
        try {
            lista = ControladorPrincipal.getInstance().getEntity().createNativeQuery("SELECT situacionlaboral, count(*), CAST('Madre' AS VARCHAR) AS aux FROM caso, adulto, nino_adolescente WHERE caso.nino_adolescente_id = nino_adolescente.id AND nino_adolescente.madre_id = adulto.id AND fecha = '" + fecha + "' GROUP BY situacionlaboral ORDER BY situacionlaboral ASC").getResultList();
            lista.addAll(ControladorPrincipal.getInstance().getEntity().createNativeQuery("SELECT situacionlaboral, count(*), CAST('Padre' AS VARCHAR) AS aux FROM caso, adulto, nino_adolescente WHERE caso.nino_adolescente_id = nino_adolescente.id AND nino_adolescente.padre_id = adulto.id AND fecha = '" + fecha + "' GROUP BY situacionlaboral ORDER BY situacionlaboral ASC").getResultList());
            Iterator<Object[]> it = lista.iterator();
            while (it.hasNext()) {
                Object[] obj = it.next();
                if (Integer.parseInt(obj[0].toString()) == 0) {
                    obj[0] = "Desocupado";
                } else {
                    if (Integer.parseInt(obj[0].toString()) == 1) {
                        obj[0] = "Trabajo precario";
                    } else {
                        if (Integer.parseInt(obj[0].toString()) == 2) {
                            obj[0] = "Beneficiario";
                        } else {
                            if (Integer.parseInt(obj[0].toString()) == 3) {
                                obj[0] = "Ocupado";
                            }
                        }
                    }
                }
            }
            ControladorPrincipal.getInstance().getEntity().getTransaction().commit();
        } catch (Exception e) {
            ControladorPrincipal.getInstance().getEntity().getTransaction().rollback();
        }
        return lista;
    }

    public List<Object[]> situacionPeriodo(Date inicio, Date fin) {
        List<Object[]> lista = null;
        ControladorPrincipal.getInstance().getEntity().getTransaction().begin();
        try {
            lista = ControladorPrincipal.getInstance().getEntity().createNativeQuery("SELECT situacionlaboral, count(*), CAST('Madre' AS VARCHAR) AS aux FROM caso, adulto, nino_adolescente WHERE caso.nino_adolescente_id = nino_adolescente.id AND nino_adolescente.madre_id = adulto.id AND fecha BETWEEN '" + inicio + "' AND '" + fin + "' GROUP BY situacionlaboral ORDER BY situacionlaboral ASC").getResultList();
            lista.addAll(ControladorPrincipal.getInstance().getEntity().createNativeQuery("SELECT situacionlaboral, count(*), CAST('Padre' AS VARCHAR) AS aux FROM caso, adulto, nino_adolescente WHERE caso.nino_adolescente_id = nino_adolescente.id AND nino_adolescente.padre_id = adulto.id AND fecha BETWEEN '" + inicio + "' AND '" + fin + "' GROUP BY situacionlaboral ORDER BY situacionlaboral ASC").getResultList());
            Iterator<Object[]> it = lista.iterator();
            while (it.hasNext()) {
                Object[] obj = it.next();
                if (Integer.parseInt(obj[0].toString()) == 0) {
                    obj[0] = "Desocupado";
                } else {
                    if (Integer.parseInt(obj[0].toString()) == 1) {
                        obj[0] = "Trabajo precario";
                    } else {
                        if (Integer.parseInt(obj[0].toString()) == 2) {
                            obj[0] = "Beneficiario";
                        } else {
                            if (Integer.parseInt(obj[0].toString()) == 3) {
                                obj[0] = "Ocupado";
                            }
                        }
                    }
                }
            }
            ControladorPrincipal.getInstance().getEntity().getTransaction().commit();
        } catch (Exception e) {
            ControladorPrincipal.getInstance().getEntity().getTransaction().rollback();
        }
        return lista;
    }

    public List<Object[]> tipoViolenciaFecha(Date fecha) {
        List<Object[]> lista = null;
        ControladorPrincipal.getInstance().getEntity().getTransaction().begin();
        try {
            lista = ControladorPrincipal.getInstance().getEntity().createNativeQuery("SELECT motivo, count(*) FROM caso WHERE motivo BETWEEN 4 AND 7 AND fecha = '" + fecha + "' GROUP BY motivo ORDER BY motivo ASC").getResultList();
            Iterator<Object[]> it = lista.iterator();
            while (it.hasNext()) {
                Object[] obj = it.next();
                if (Integer.parseInt(obj[0].toString()) == 4) {
                    obj[0] = "Maltrato";
                } else {
                    if (Integer.parseInt(obj[0].toString()) == 5) {
                        obj[0] = "Abandono";
                    } else {
                        if (Integer.parseInt(obj[0].toString()) == 6) {
                            obj[0] = "Abuso sexual";
                        } else {
                            if (Integer.parseInt(obj[0].toString()) == 7) {
                                obj[0] = "Testigo de violencia";
                            }
                        }
                    }
                }
            }
            ControladorPrincipal.getInstance().getEntity().getTransaction().commit();
        } catch (Exception e) {
            ControladorPrincipal.getInstance().getEntity().getTransaction().rollback();
        }
        return lista;
    }

    public List<Object[]> tipoViolenciaPeriodo(Date inicio, Date fin) {
        List<Object[]> lista = null;
        ControladorPrincipal.getInstance().getEntity().getTransaction().begin();
        try {
            lista = ControladorPrincipal.getInstance().getEntity().createNativeQuery("SELECT motivo, count(*) FROM caso WHERE motivo BETWEEN 4 AND 7 AND fecha BETWEEN '" + inicio + "' AND '" + fin + "' GROUP BY motivo ORDER BY motivo ASC").getResultList();
            Iterator<Object[]> it = lista.iterator();
            while (it.hasNext()) {
                Object[] obj = it.next();
                if (Integer.parseInt(obj[0].toString()) == 4) {
                    obj[0] = "Maltrato";
                } else {
                    if (Integer.parseInt(obj[0].toString()) == 5) {
                        obj[0] = "Abandono";
                    } else {
                        if (Integer.parseInt(obj[0].toString()) == 6) {
                            obj[0] = "Abuso sexual";
                        } else {
                            if (Integer.parseInt(obj[0].toString()) == 7) {
                                obj[0] = "Testigo de violencia";
                            }
                        }
                    }
                }
            }
            ControladorPrincipal.getInstance().getEntity().getTransaction().commit();
        } catch (Exception e) {
            ControladorPrincipal.getInstance().getEntity().getTransaction().rollback();
        }
        return lista;
    }

    public List<Object[]> violenciaConyugalFecha(Date fecha) {
        List<Object[]> lista = null;
        ControladorPrincipal.getInstance().getEntity().getTransaction().begin();
        try {
            lista = ControladorPrincipal.getInstance().getEntity().createNativeQuery("SELECT violenciaconyugal, count(*) FROM (SELECT DISTINCT violenciaconyugal, caso_numerocaso FROM intervencion WHERE dtype = 'IntervencionComun') AS a, caso WHERE a.caso_numerocaso = caso.numerocaso AND fecha = '" + fecha + "' GROUP BY violenciaconyugal ORDER BY violenciaconyugal ASC").getResultList();
            Iterator<Object[]> it = lista.iterator();
            while (it.hasNext()) {
                Object[] obj = it.next();
                if (Boolean.parseBoolean(obj[0].toString())) {
                    obj[0] = "SI";
                } else {
                    obj[0] = "NO";
                }
            }
            ControladorPrincipal.getInstance().getEntity().getTransaction().commit();
        } catch (Exception e) {
            ControladorPrincipal.getInstance().getEntity().getTransaction().rollback();
        }
        return lista;
    }

    public List<Object[]> violenciaConyugalPeriodo(Date inicio, Date fin) {
        List<Object[]> lista = null;
        ControladorPrincipal.getInstance().getEntity().getTransaction().begin();
        try {
            lista = ControladorPrincipal.getInstance().getEntity().createNativeQuery("SELECT violenciaconyugal, count(*) FROM (SELECT DISTINCT violenciaconyugal, caso_numerocaso FROM intervencion WHERE dtype = 'IntervencionComun') AS a, caso WHERE a.caso_numerocaso = caso.numerocaso AND fecha BETWEEN '" + inicio + "' AND '" + fin + "' GROUP BY violenciaconyugal ORDER BY violenciaconyugal ASC").getResultList();
            Iterator<Object[]> it = lista.iterator();
            while (it.hasNext()) {
                Object[] obj = it.next();
                if (Boolean.parseBoolean(obj[0].toString())) {
                    obj[0] = "SI";
                } else {
                    obj[0] = "NO";
                }
            }
            ControladorPrincipal.getInstance().getEntity().getTransaction().commit();
        } catch (Exception e) {
            ControladorPrincipal.getInstance().getEntity().getTransaction().rollback();
        }
        return lista;
    }

    public List<Object[]> escolaridadFecha(Date fecha) {
        List<Object[]> lista = null;
        ControladorPrincipal.getInstance().getEntity().getTransaction().begin();
        try {
            lista = ControladorPrincipal.getInstance().getEntity().createNativeQuery("SELECT primariacom, count(*), CAST('Primaria' AS VARCHAR) AS aux FROM (SELECT DISTINCT primariacom, caso_numerocaso FROM intervencion WHERE dtype = 'IntervencionAdiccion' AND primaria = 'true') AS a, caso WHERE a.caso_numerocaso = caso.numerocaso AND fecha = '" + fecha + "' GROUP BY primariacom ORDER BY primariacom ASC").getResultList();
            lista.addAll(ControladorPrincipal.getInstance().getEntity().createNativeQuery("SELECT secundariacom, count(*), CAST('Secundaria' AS VARCHAR) AS aux FROM (SELECT DISTINCT secundariacom, caso_numerocaso FROM intervencion WHERE dtype = 'IntervencionAdiccion' AND secundaria = 'true') AS a, caso WHERE a.caso_numerocaso = caso.numerocaso AND fecha = '" + fecha + "' GROUP BY secundariacom ORDER BY secundariacom ASC").getResultList());
            lista.addAll(ControladorPrincipal.getInstance().getEntity().createNativeQuery("SELECT CAST('' AS VARCHAR), count(*), CAST('Universidad' AS VARCHAR) AS aux FROM (SELECT DISTINCT universidad, caso_numerocaso FROM intervencion WHERE dtype = 'IntervencionAdiccion' AND universidad = 'true') AS a, caso WHERE a.caso_numerocaso = caso.numerocaso AND fecha = '" + fecha + "' GROUP BY universidad").getResultList());
            Iterator<Object[]> it = lista.iterator();
            while (it.hasNext()) {
                Object[] obj = it.next();
                if (Integer.parseInt(obj[0].toString()) == 0) {
                    obj[0] = "Completo";
                } else {
                    if (Integer.parseInt(obj[0].toString()) == 1) {
                        obj[0] = "Incompleto";
                    }
                }
            }
            ControladorPrincipal.getInstance().getEntity().getTransaction().commit();
        } catch (Exception e) {
            ControladorPrincipal.getInstance().getEntity().getTransaction().rollback();
        }
        return lista;
    }

    public List<Object[]> escolaridadPeriodo(Date inicio, Date fin) {
        List<Object[]> lista = null;
        ControladorPrincipal.getInstance().getEntity().getTransaction().begin();
        try {
            lista = ControladorPrincipal.getInstance().getEntity().createNativeQuery("SELECT primariacom, count(*), CAST('Primaria' AS VARCHAR) AS aux FROM (SELECT DISTINCT primariacom, caso_numerocaso FROM intervencion WHERE dtype = 'IntervencionAdiccion' AND primaria = 'true') AS a, caso WHERE a.caso_numerocaso = caso.numerocaso AND fecha BETWEEN '" + inicio + "' AND '" + fin + "' GROUP BY primariacom ORDER BY primariacom ASC").getResultList();
            lista.addAll(ControladorPrincipal.getInstance().getEntity().createNativeQuery("SELECT secundariacom, count(*), CAST('Secundaria' AS VARCHAR) AS aux FROM (SELECT DISTINCT secundariacom, caso_numerocaso FROM intervencion WHERE dtype = 'IntervencionAdiccion' AND secundaria = 'true') AS a, caso WHERE a.caso_numerocaso = caso.numerocaso AND fecha BETWEEN '" + inicio + "' AND '" + fin + "' GROUP BY secundariacom ORDER BY secundariacom ASC").getResultList());
            lista.addAll(ControladorPrincipal.getInstance().getEntity().createNativeQuery("SELECT CAST('' AS VARCHAR), count(*), CAST('Universidad' AS VARCHAR) AS aux FROM (SELECT DISTINCT universidad, caso_numerocaso FROM intervencion WHERE dtype = 'IntervencionAdiccion' AND universidad = 'true') AS a, caso WHERE a.caso_numerocaso = caso.numerocaso AND fecha BETWEEN '" + inicio + "' AND '" + fin + "' GROUP BY universidad").getResultList());
            Iterator<Object[]> it = lista.iterator();
            while (it.hasNext()) {
                Object[] obj = it.next();
                if (Integer.parseInt(obj[0].toString()) == 0) {
                    obj[0] = "Completo";
                } else {
                    if (Integer.parseInt(obj[0].toString()) == 1) {
                        obj[0] = "Incompleto";
                    }
                }
            }
            ControladorPrincipal.getInstance().getEntity().getTransaction().commit();
        } catch (Exception e) {
            ControladorPrincipal.getInstance().getEntity().getTransaction().rollback();
        }
        return lista;
    }

    public List<Object[]> situacionLaboralFecha(Date fecha) {
        List<Object[]> lista = null;
        ControladorPrincipal.getInstance().getEntity().getTransaction().begin();
        try {
            lista = ControladorPrincipal.getInstance().getEntity().createNativeQuery("SELECT situacionlaboral, count(*) FROM (SELECT DISTINCT situacionlaboral, caso_numerocaso FROM intervencion WHERE dtype = 'IntervencionAdiccion') AS a, caso WHERE a.caso_numerocaso = caso.numerocaso AND fecha = '" + fecha + "' GROUP BY situacionlaboral ORDER BY situacionlaboral ASC").getResultList();
            Iterator<Object[]> it = lista.iterator();
            while (it.hasNext()) {
                Object[] obj = it.next();
                if (Integer.parseInt(obj[0].toString()) == 0) {
                    obj[0] = "Desocupado";
                } else {
                    if (Integer.parseInt(obj[0].toString()) == 1) {
                        obj[0] = "Trabajo precario";
                    } else {
                        if (Integer.parseInt(obj[0].toString()) == 2) {
                            obj[0] = "Beneficiario";
                        } else {
                            if (Integer.parseInt(obj[0].toString()) == 3) {
                                obj[0] = "Ocupado";
                            }
                        }
                    }
                }
            }
            ControladorPrincipal.getInstance().getEntity().getTransaction().commit();
        } catch (Exception e) {
            ControladorPrincipal.getInstance().getEntity().getTransaction().rollback();
        }
        return lista;
    }

    public List<Object[]> situacionLaboralPeriodo(Date inicio, Date fin) {
        List<Object[]> lista = null;
        ControladorPrincipal.getInstance().getEntity().getTransaction().begin();
        try {
            lista = ControladorPrincipal.getInstance().getEntity().createNativeQuery("SELECT situacionlaboral, count(*) FROM (SELECT DISTINCT situacionlaboral, caso_numerocaso FROM intervencion WHERE dtype = 'IntervencionAdiccion') AS a, caso WHERE a.caso_numerocaso = caso.numerocaso AND fecha BETWEEN '" + inicio + "' AND '" + fin + "' GROUP BY situacionlaboral ORDER BY situacionlaboral ASC").getResultList();
            Iterator<Object[]> it = lista.iterator();
            while (it.hasNext()) {
                Object[] obj = it.next();
                if (Integer.parseInt(obj[0].toString()) == 0) {
                    obj[0] = "Desocupado";
                } else {
                    if (Integer.parseInt(obj[0].toString()) == 1) {
                        obj[0] = "Trabajo precario";
                    } else {
                        if (Integer.parseInt(obj[0].toString()) == 2) {
                            obj[0] = "Beneficiario";
                        } else {
                            if (Integer.parseInt(obj[0].toString()) == 3) {
                                obj[0] = "Ocupado";
                            }
                        }
                    }
                }
            }
            ControladorPrincipal.getInstance().getEntity().getTransaction().commit();
        } catch (Exception e) {
            ControladorPrincipal.getInstance().getEntity().getTransaction().rollback();
        }
        return lista;
    }

    public List<Object[]> edadInicioFecha(Date fecha) {
        List<Object[]> lista = null;
        ControladorPrincipal.getInstance().getEntity().getTransaction().begin();
        try {
            lista = ControladorPrincipal.getInstance().getEntity().createNativeQuery("SELECT edadinicio, count(*) FROM (SELECT DISTINCT edadinicio, caso_numerocaso FROM intervencion WHERE dtype = 'IntervencionAdiccion') AS a, caso WHERE a.caso_numerocaso = caso.numerocaso AND fecha = '" + fecha + "' GROUP BY edadinicio ORDER BY edadinicio ASC").getResultList();
            ControladorPrincipal.getInstance().getEntity().getTransaction().commit();
        } catch (Exception e) {
            ControladorPrincipal.getInstance().getEntity().getTransaction().rollback();
        }
        return lista;
    }

    public List<Object[]> edadInicioPeriodo(Date inicio, Date fin) {
        List<Object[]> lista = null;
        ControladorPrincipal.getInstance().getEntity().getTransaction().begin();
        try {
            lista = ControladorPrincipal.getInstance().getEntity().createNativeQuery("SELECT edadinicio, count(*) FROM (SELECT DISTINCT edadinicio, caso_numerocaso FROM intervencion WHERE dtype = 'IntervencionAdiccion') AS a, caso WHERE a.caso_numerocaso = caso.numerocaso AND fecha BETWEEN '" + inicio + "' AND '" + fin + "' GROUP BY edadinicio ORDER BY edadinicio ASC").getResultList();
            ControladorPrincipal.getInstance().getEntity().getTransaction().commit();
        } catch (Exception e) {
            ControladorPrincipal.getInstance().getEntity().getTransaction().rollback();
        }
        return lista;
    }

    public List<Object[]> sustanciaInicioFecha(Date fecha) {
        List<Object[]> lista = null;
        ControladorPrincipal.getInstance().getEntity().getTransaction().begin();
        try {
            lista = ControladorPrincipal.getInstance().getEntity().createNativeQuery("SELECT sustanciainicio, count(*) FROM (SELECT DISTINCT sustanciainicio, caso_numerocaso FROM intervencion WHERE dtype = 'IntervencionAdiccion') AS a, caso WHERE a.caso_numerocaso = caso.numerocaso AND fecha = '" + fecha + "' GROUP BY sustanciainicio ORDER BY sustanciainicio ASC").getResultList();
            Iterator<Object[]> it = lista.iterator();
            while (it.hasNext()) {
                Object[] obj = it.next();
                if (Integer.parseInt(obj[0].toString()) == 0) {
                    obj[0] = "Policonsumo";
                } else {
                    if (Integer.parseInt(obj[0].toString()) == 1) {
                        obj[0] = "Tabaco";
                    } else {
                        if (Integer.parseInt(obj[0].toString()) == 2) {
                            obj[0] = "Alcohol";
                        } else {
                            if (Integer.parseInt(obj[0].toString()) == 3) {
                                obj[0] = "Tranquilizante";
                            } else {
                                if (Integer.parseInt(obj[0].toString()) == 4) {
                                    obj[0] = "Estimulante";
                                } else {
                                    if (Integer.parseInt(obj[0].toString()) == 5) {
                                        obj[0] = "Solventes e inhalantes";
                                    } else {
                                        if (Integer.parseInt(obj[0].toString()) == 6) {
                                            obj[0] = "Marihuana";
                                        } else {
                                            if (Integer.parseInt(obj[0].toString()) == 7) {
                                                obj[0] = "Cocaina";
                                            } else {
                                                if (Integer.parseInt(obj[0].toString()) == 8) {
                                                    obj[0] = "Pasta base";
                                                } else {
                                                    if (Integer.parseInt(obj[0].toString()) == 9) {
                                                        obj[0] = "Heroina";
                                                    } else {
                                                        if (Integer.parseInt(obj[0].toString()) == 10) {
                                                            obj[0] = "Extasis";
                                                        } else {
                                                            if (Integer.parseInt(obj[0].toString()) == 11) {
                                                                obj[0] = "Otras";
                                                            }
                                                        }
                                                    }
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
            ControladorPrincipal.getInstance().getEntity().getTransaction().commit();
        } catch (Exception e) {
            ControladorPrincipal.getInstance().getEntity().getTransaction().rollback();
        }
        return lista;
    }

    public List<Object[]> sustanciaInicioPeriodo(Date inicio, Date fin) {
        List<Object[]> lista = null;
        ControladorPrincipal.getInstance().getEntity().getTransaction().begin();
        try {
            lista = ControladorPrincipal.getInstance().getEntity().createNativeQuery("SELECT sustanciainicio, count(*) FROM (SELECT DISTINCT sustanciainicio, caso_numerocaso FROM intervencion WHERE dtype = 'IntervencionAdiccion') AS a, caso WHERE a.caso_numerocaso = caso.numerocaso AND fecha BETWEEN '" + inicio + "' AND '" + fin + "' GROUP BY sustanciainicio ORDER BY sustanciainicio ASC").getResultList();
            Iterator<Object[]> it = lista.iterator();
            while (it.hasNext()) {
                Object[] obj = it.next();
                if (Integer.parseInt(obj[0].toString()) == 0) {
                    obj[0] = "Policonsumo";
                } else {
                    if (Integer.parseInt(obj[0].toString()) == 1) {
                        obj[0] = "Tabaco";
                    } else {
                        if (Integer.parseInt(obj[0].toString()) == 2) {
                            obj[0] = "Alcohol";
                        } else {
                            if (Integer.parseInt(obj[0].toString()) == 3) {
                                obj[0] = "Tranquilizante";
                            } else {
                                if (Integer.parseInt(obj[0].toString()) == 4) {
                                    obj[0] = "Estimulante";
                                } else {
                                    if (Integer.parseInt(obj[0].toString()) == 5) {
                                        obj[0] = "Solventes e inhalantes";
                                    } else {
                                        if (Integer.parseInt(obj[0].toString()) == 6) {
                                            obj[0] = "Marihuana";
                                        } else {
                                            if (Integer.parseInt(obj[0].toString()) == 7) {
                                                obj[0] = "Cocaina";
                                            } else {
                                                if (Integer.parseInt(obj[0].toString()) == 8) {
                                                    obj[0] = "Pasta base";
                                                } else {
                                                    if (Integer.parseInt(obj[0].toString()) == 9) {
                                                        obj[0] = "Heroina";
                                                    } else {
                                                        if (Integer.parseInt(obj[0].toString()) == 10) {
                                                            obj[0] = "Extasis";
                                                        } else {
                                                            if (Integer.parseInt(obj[0].toString()) == 11) {
                                                                obj[0] = "Otras";
                                                            }
                                                        }
                                                    }
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
            ControladorPrincipal.getInstance().getEntity().getTransaction().commit();
        } catch (Exception e) {
            ControladorPrincipal.getInstance().getEntity().getTransaction().rollback();
        }
        return lista;
    }

    public List<Object[]> sustanciaAbusoFecha(Date fecha) {
        List<Object[]> lista = null;
        ControladorPrincipal.getInstance().getEntity().getTransaction().begin();
        try {
            lista = ControladorPrincipal.getInstance().getEntity().createNativeQuery("SELECT sustanciaabuso, count(*) FROM (SELECT DISTINCT sustanciaabuso, caso_numerocaso FROM intervencion WHERE dtype = 'IntervencionAdiccion') AS a, caso WHERE a.caso_numerocaso = caso.numerocaso AND fecha = '" + fecha + "' GROUP BY sustanciaabuso ORDER BY sustanciaabuso ASC").getResultList();
            Iterator<Object[]> it = lista.iterator();
            while (it.hasNext()) {
                Object[] obj = it.next();
                if (Integer.parseInt(obj[0].toString()) == 0) {
                    obj[0] = "Policonsumo";
                } else {
                    if (Integer.parseInt(obj[0].toString()) == 1) {
                        obj[0] = "Tabaco";
                    } else {
                        if (Integer.parseInt(obj[0].toString()) == 2) {
                            obj[0] = "Alcohol";
                        } else {
                            if (Integer.parseInt(obj[0].toString()) == 3) {
                                obj[0] = "Tranquilizante";
                            } else {
                                if (Integer.parseInt(obj[0].toString()) == 4) {
                                    obj[0] = "Estimulante";
                                } else {
                                    if (Integer.parseInt(obj[0].toString()) == 5) {
                                        obj[0] = "Solventes e inhalantes";
                                    } else {
                                        if (Integer.parseInt(obj[0].toString()) == 6) {
                                            obj[0] = "Marihuana";
                                        } else {
                                            if (Integer.parseInt(obj[0].toString()) == 7) {
                                                obj[0] = "Cocaina";
                                            } else {
                                                if (Integer.parseInt(obj[0].toString()) == 8) {
                                                    obj[0] = "Pasta base";
                                                } else {
                                                    if (Integer.parseInt(obj[0].toString()) == 9) {
                                                        obj[0] = "Heroina";
                                                    } else {
                                                        if (Integer.parseInt(obj[0].toString()) == 10) {
                                                            obj[0] = "Extasis";
                                                        } else {
                                                            if (Integer.parseInt(obj[0].toString()) == 11) {
                                                                obj[0] = "Otras";
                                                            }
                                                        }
                                                    }
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
            ControladorPrincipal.getInstance().getEntity().getTransaction().commit();
        } catch (Exception e) {
            ControladorPrincipal.getInstance().getEntity().getTransaction().rollback();
        }
        return lista;
    }

    public List<Object[]> sustanciaAbusoPeriodo(Date inicio, Date fin) {
        List<Object[]> lista = null;
        ControladorPrincipal.getInstance().getEntity().getTransaction().begin();
        try {
            lista = ControladorPrincipal.getInstance().getEntity().createNativeQuery("SELECT sustanciaabuso, count(*) FROM (SELECT DISTINCT sustanciaabuso, caso_numerocaso FROM intervencion WHERE dtype = 'IntervencionAdiccion') AS a, caso WHERE a.caso_numerocaso = caso.numerocaso AND fecha BETWEEN '" + inicio + "' AND '" + fin + "' GROUP BY sustanciaabuso ORDER BY sustanciaabuso ASC").getResultList();
            Iterator<Object[]> it = lista.iterator();
            while (it.hasNext()) {
                Object[] obj = it.next();
                if (Integer.parseInt(obj[0].toString()) == 0) {
                    obj[0] = "Policonsumo";
                } else {
                    if (Integer.parseInt(obj[0].toString()) == 1) {
                        obj[0] = "Tabaco";
                    } else {
                        if (Integer.parseInt(obj[0].toString()) == 2) {
                            obj[0] = "Alcohol";
                        } else {
                            if (Integer.parseInt(obj[0].toString()) == 3) {
                                obj[0] = "Tranquilizante";
                            } else {
                                if (Integer.parseInt(obj[0].toString()) == 4) {
                                    obj[0] = "Estimulante";
                                } else {
                                    if (Integer.parseInt(obj[0].toString()) == 5) {
                                        obj[0] = "Solventes e inhalantes";
                                    } else {
                                        if (Integer.parseInt(obj[0].toString()) == 6) {
                                            obj[0] = "Marihuana";
                                        } else {
                                            if (Integer.parseInt(obj[0].toString()) == 7) {
                                                obj[0] = "Cocaina";
                                            } else {
                                                if (Integer.parseInt(obj[0].toString()) == 8) {
                                                    obj[0] = "Pasta base";
                                                } else {
                                                    if (Integer.parseInt(obj[0].toString()) == 9) {
                                                        obj[0] = "Heroina";
                                                    } else {
                                                        if (Integer.parseInt(obj[0].toString()) == 10) {
                                                            obj[0] = "Extasis";
                                                        } else {
                                                            if (Integer.parseInt(obj[0].toString()) == 11) {
                                                                obj[0] = "Otras";
                                                            }
                                                        }
                                                    }
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
            ControladorPrincipal.getInstance().getEntity().getTransaction().commit();
        } catch (Exception e) {
            ControladorPrincipal.getInstance().getEntity().getTransaction().rollback();
        }
        return lista;
    }

    public List<Object[]> consumeFecha(Date fecha) {
        List<Object[]> lista = null;
        ControladorPrincipal.getInstance().getEntity().getTransaction().begin();
        try {
            lista = ControladorPrincipal.getInstance().getEntity().createNativeQuery("SELECT consumealcohol, count(*) FROM (SELECT DISTINCT consumealcohol, caso_numerocaso FROM intervencion WHERE dtype = 'IntervencionAdiccion') AS a, caso WHERE a.caso_numerocaso = caso.numerocaso  AND fecha = '" + fecha + "' GROUP BY consumealcohol").getResultList();
            Iterator<Object[]> it = lista.iterator();
            while (it.hasNext()) {
                Object[] obj = it.next();
                if (Boolean.parseBoolean(obj[0].toString())) {
                    obj[0] = "SI";
                } else {
                    obj[0] = "NO";
                }
            }
            ControladorPrincipal.getInstance().getEntity().getTransaction().commit();
        } catch (Exception e) {
            ControladorPrincipal.getInstance().getEntity().getTransaction().rollback();
        }
        return lista;
    }

    public List<Object[]> consumePeriodo(Date inicio, Date fin) {
        List<Object[]> lista = null;
        ControladorPrincipal.getInstance().getEntity().getTransaction().begin();
        try {
            lista = ControladorPrincipal.getInstance().getEntity().createNativeQuery("SELECT consumealcohol, count(*) FROM (SELECT DISTINCT consumealcohol, caso_numerocaso FROM intervencion WHERE dtype = 'IntervencionAdiccion') AS a, caso WHERE a.caso_numerocaso = caso.numerocaso  AND fecha BETWEEN '" + inicio + "' AND '" + fin + "' GROUP BY consumealcohol").getResultList();
            Iterator<Object[]> it = lista.iterator();
            while (it.hasNext()) {
                Object[] obj = it.next();
                if (Boolean.parseBoolean(obj[0].toString())) {
                    obj[0] = "SI";
                } else {
                    obj[0] = "NO";
                }
            }
            ControladorPrincipal.getInstance().getEntity().getTransaction().commit();
        } catch (Exception e) {
            ControladorPrincipal.getInstance().getEntity().getTransaction().rollback();
        }
        return lista;
    }

    public List<Object[]> tratamientoFecha(Date fecha) {
        List<Object[]> lista = null;
        ControladorPrincipal.getInstance().getEntity().getTransaction().begin();
        try {
            lista = ControladorPrincipal.getInstance().getEntity().createNativeQuery("SELECT tratamientoanterior, count(*) FROM (SELECT DISTINCT tratamientoanterior, caso_numerocaso FROM intervencion WHERE dtype = 'IntervencionAdiccion') AS a, caso WHERE a.caso_numerocaso = caso.numerocaso AND fecha = '" + fecha + "' GROUP BY tratamientoanterior").getResultList();
            Iterator<Object[]> it = lista.iterator();
            while (it.hasNext()) {
                Object[] obj = it.next();
                if (Boolean.parseBoolean(obj[0].toString())) {
                    obj[0] = "SI";
                } else {
                    obj[0] = "NO";
                }
            }
            ControladorPrincipal.getInstance().getEntity().getTransaction().commit();
        } catch (Exception e) {
            ControladorPrincipal.getInstance().getEntity().getTransaction().rollback();
        }
        return lista;
    }

    public List<Object[]> tratamientoPeriodo(Date inicio, Date fin) {
        List<Object[]> lista = null;
        ControladorPrincipal.getInstance().getEntity().getTransaction().begin();
        try {
            lista = ControladorPrincipal.getInstance().getEntity().createNativeQuery("SELECT tratamientoanterior, count(*) FROM (SELECT DISTINCT tratamientoanterior, caso_numerocaso FROM intervencion WHERE dtype = 'IntervencionAdiccion') AS a, caso WHERE a.caso_numerocaso = caso.numerocaso AND fecha BETWEEN '" + inicio + "' AND '" + fin + "'  GROUP BY tratamientoanterior").getResultList();
            Iterator<Object[]> it = lista.iterator();
            while (it.hasNext()) {
                Object[] obj = it.next();
                if (Boolean.parseBoolean(obj[0].toString())) {
                    obj[0] = "SI";
                } else {
                    obj[0] = "NO";
                }
            }
            ControladorPrincipal.getInstance().getEntity().getTransaction().commit();
        } catch (Exception e) {
            ControladorPrincipal.getInstance().getEntity().getTransaction().rollback();
        }
        return lista;
    }

    public List<Object[]> zonaFecha(Date fecha) {
        List<Object[]> lista = null;
        ControladorPrincipal.getInstance().getEntity().getTransaction().begin();
        try {
            lista = ControladorPrincipal.getInstance().getEntity().createNativeQuery("SELECT zona, count(*) FROM caso, nino_adolescente WHERE caso.nino_adolescente_id = nino_adolescente.id AND fecha = '" + fecha + "' GROUP BY zona ORDER BY zona ASC").getResultList();
            Iterator<Object[]> it = lista.iterator();
            while (it.hasNext()) {
                Object[] obj = it.next();
                if (Integer.parseInt(obj[0].toString()) == 0) {
                    obj[0] = "NO";
                } else {
                    if (Integer.parseInt(obj[0].toString()) == 1) {
                        obj[0] = "NE";
                    } else {
                        if (Integer.parseInt(obj[0].toString()) == 2) {
                            obj[0] = "SO";
                        } else {
                            if (Integer.parseInt(obj[0].toString()) == 3) {
                                obj[0] = "SE";
                            }
                        }
                    }
                }
            }
            ControladorPrincipal.getInstance().getEntity().getTransaction().commit();
        } catch (Exception e) {
            ControladorPrincipal.getInstance().getEntity().getTransaction().rollback();
        }
        return lista;
    }

    public List<Object[]> zonaPeriodo(Date inicio, Date fin) {
        List<Object[]> lista = null;
        ControladorPrincipal.getInstance().getEntity().getTransaction().begin();
        try {
            lista = ControladorPrincipal.getInstance().getEntity().createNativeQuery("SELECT zona, count(*) FROM caso, nino_adolescente WHERE caso.nino_adolescente_id = nino_adolescente.id AND fecha BETWEEN '" + inicio + "' AND '" + fin + "' GROUP BY zona ORDER BY zona ASC").getResultList();
            Iterator<Object[]> it = lista.iterator();
            while (it.hasNext()) {
                Object[] obj = it.next();
                if (Integer.parseInt(obj[0].toString()) == 0) {
                    obj[0] = "NO";
                } else {
                    if (Integer.parseInt(obj[0].toString()) == 1) {
                        obj[0] = "NE";
                    } else {
                        if (Integer.parseInt(obj[0].toString()) == 2) {
                            obj[0] = "SO";
                        } else {
                            if (Integer.parseInt(obj[0].toString()) == 3) {
                                obj[0] = "SE";
                            }
                        }
                    }
                }
            }
            ControladorPrincipal.getInstance().getEntity().getTransaction().commit();
        } catch (Exception e) {
            ControladorPrincipal.getInstance().getEntity().getTransaction().rollback();
        }
        return lista;
    }

    public List<Object[]> zonaEdadFecha(Date fecha) {
        List<Object[]> lista = null;
        ControladorPrincipal.getInstance().getEntity().getTransaction().begin();
        try {
            lista = ControladorPrincipal.getInstance().getEntity().createNativeQuery("SELECT edad, count(*), zona FROM caso, nino_adolescente WHERE caso.nino_adolescente_id = nino_adolescente.id  AND fecha = '" + fecha + "' GROUP BY zona, edad ORDER BY zona ASC").getResultList();
            Iterator<Object[]> it = lista.iterator();
            while (it.hasNext()) {
                Object[] obj = it.next();
                if (Integer.parseInt(obj[2].toString()) == 0) {
                    obj[2] = "NO";
                } else {
                    if (Integer.parseInt(obj[2].toString()) == 1) {
                        obj[2] = "NE";
                    } else {
                        if (Integer.parseInt(obj[2].toString()) == 2) {
                            obj[2] = "SO";
                        } else {
                            if (Integer.parseInt(obj[2].toString()) == 3) {
                                obj[2] = "SE";
                            }
                        }
                    }
                }
            }
            ControladorPrincipal.getInstance().getEntity().getTransaction().commit();
        } catch (Exception e) {
            ControladorPrincipal.getInstance().getEntity().getTransaction().rollback();
        }
        return lista;
    }

    public List<Object[]> zonaEdadPeriodo(Date inicio, Date fin) {
        List<Object[]> lista = null;
        ControladorPrincipal.getInstance().getEntity().getTransaction().begin();
        try {
            lista = ControladorPrincipal.getInstance().getEntity().createNativeQuery("SELECT edad, count(*), zona FROM caso, nino_adolescente WHERE caso.nino_adolescente_id = nino_adolescente.id  AND fecha BETWEEN '" + inicio + "' AND '" + fin + "' GROUP BY zona, edad ORDER BY zona ASC").getResultList();
            Iterator<Object[]> it = lista.iterator();
            while (it.hasNext()) {
                Object[] obj = it.next();
                if (Integer.parseInt(obj[2].toString()) == 0) {
                    obj[2] = "NO";
                } else {
                    if (Integer.parseInt(obj[2].toString()) == 1) {
                        obj[2] = "NE";
                    } else {
                        if (Integer.parseInt(obj[2].toString()) == 2) {
                            obj[2] = "SO";
                        } else {
                            if (Integer.parseInt(obj[2].toString()) == 3) {
                                obj[2] = "SE";
                            }
                        }
                    }
                }
            }
            ControladorPrincipal.getInstance().getEntity().getTransaction().commit();
        } catch (Exception e) {
            ControladorPrincipal.getInstance().getEntity().getTransaction().rollback();
        }
        return lista;
    }

    public List<Object[]> zonaMotivoFecha(Date fecha) {
        List<Object[]> lista = null;
        ControladorPrincipal.getInstance().getEntity().getTransaction().begin();
        try {
            lista = ControladorPrincipal.getInstance().getEntity().createNativeQuery("SELECT motivo, count(*), zona FROM caso, nino_adolescente WHERE caso.nino_adolescente_id = nino_adolescente.id  AND fecha = '" + fecha + "' GROUP BY zona, motivo ORDER BY zona ASC").getResultList();
            Iterator<Object[]> it = lista.iterator();
            while (it.hasNext()) {
                Object[] obj = it.next();
                if (Integer.parseInt(obj[0].toString()) == 1 || Integer.parseInt(obj[0].toString()) == 2) {
                    obj[0] = "Ayuda directa";
                } else {
                    if (Integer.parseInt(obj[0].toString()) == 4 || Integer.parseInt(obj[0].toString()) == 5 || Integer.parseInt(obj[0].toString()) == 6 || Integer.parseInt(obj[0].toString()) == 7) {
                        obj[0] = "Violencia";
                    } else {
                        if (Integer.parseInt(obj[0].toString()) == 8) {
                            obj[0] = "Conductas adictivas";
                        } else {
                            if (Integer.parseInt(obj[0].toString()) == 9) {
                                obj[0] = "Problemas de conducta";
                            } else {
                                if (Integer.parseInt(obj[0].toString()) == 10) {
                                    obj[0] = "Deserción escolar";
                                } else {
                                    if (Integer.parseInt(obj[0].toString()) == 11) {
                                        obj[0] = "Trabajo infantil";
                                    } else {
                                        if (Integer.parseInt(obj[0].toString()) == 12) {
                                            obj[0] = "Situación de calle";
                                        } else {
                                            if (Integer.parseInt(obj[0].toString()) == 13) {
                                                obj[0] = "Otros";
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
                if (Integer.parseInt(obj[2].toString()) == 0) {
                    obj[2] = "NO";
                } else {
                    if (Integer.parseInt(obj[2].toString()) == 1) {
                        obj[2] = "NE";
                    } else {
                        if (Integer.parseInt(obj[2].toString()) == 2) {
                            obj[2] = "SO";
                        } else {
                            if (Integer.parseInt(obj[2].toString()) == 3) {
                                obj[2] = "SE";
                            }
                        }
                    }
                }
            }
            ControladorPrincipal.getInstance().getEntity().getTransaction().commit();
        } catch (Exception e) {
            ControladorPrincipal.getInstance().getEntity().getTransaction().rollback();
        }
        return lista;
    }

    public List<Object[]> zonaMotivoPeriodo(Date inicio, Date fin) {
        List<Object[]> lista = null;
        ControladorPrincipal.getInstance().getEntity().getTransaction().begin();
        try {
            lista = ControladorPrincipal.getInstance().getEntity().createNativeQuery("SELECT motivo, count(*), zona FROM caso, nino_adolescente WHERE caso.nino_adolescente_id = nino_adolescente.id  AND fecha BETWEEN '" + inicio + "' AND '" + fin + "' GROUP BY zona, motivo ORDER BY zona ASC").getResultList();
            Iterator<Object[]> it = lista.iterator();
            while (it.hasNext()) {
                Object[] obj = it.next();
                if (Integer.parseInt(obj[0].toString()) == 1 || Integer.parseInt(obj[0].toString()) == 2) {
                    obj[0] = "Ayuda directa";
                } else {
                    if (Integer.parseInt(obj[0].toString()) == 4 || Integer.parseInt(obj[0].toString()) == 5 || Integer.parseInt(obj[0].toString()) == 6 || Integer.parseInt(obj[0].toString()) == 7) {
                        obj[0] = "Violencia";
                    } else {
                        if (Integer.parseInt(obj[0].toString()) == 8) {
                            obj[0] = "Conductas adictivas";
                        } else {
                            if (Integer.parseInt(obj[0].toString()) == 9) {
                                obj[0] = "Problemas de conducta";
                            } else {
                                if (Integer.parseInt(obj[0].toString()) == 10) {
                                    obj[0] = "Deserción escolar";
                                } else {
                                    if (Integer.parseInt(obj[0].toString()) == 11) {
                                        obj[0] = "Trabajo infantil";
                                    } else {
                                        if (Integer.parseInt(obj[0].toString()) == 12) {
                                            obj[0] = "Situación de calle";
                                        } else {
                                            if (Integer.parseInt(obj[0].toString()) == 13) {
                                                obj[0] = "Otros";
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
                if (Integer.parseInt(obj[2].toString()) == 0) {
                    obj[2] = "NO";
                } else {
                    if (Integer.parseInt(obj[2].toString()) == 1) {
                        obj[2] = "NE";
                    } else {
                        if (Integer.parseInt(obj[2].toString()) == 2) {
                            obj[2] = "SO";
                        } else {
                            if (Integer.parseInt(obj[2].toString()) == 3) {
                                obj[2] = "SE";
                            }
                        }
                    }
                }
            }
            ControladorPrincipal.getInstance().getEntity().getTransaction().commit();
        } catch (Exception e) {
            ControladorPrincipal.getInstance().getEntity().getTransaction().rollback();
        }
        return lista;
    }

    public List<Object[]> zonaSexoFecha(Date fecha) {
        List<Object[]> lista = null;
        ControladorPrincipal.getInstance().getEntity().getTransaction().begin();
        try {
            lista = ControladorPrincipal.getInstance().getEntity().createNativeQuery("SELECT sexo, count(*), zona FROM caso, nino_adolescente WHERE caso.nino_adolescente_id = nino_adolescente.id  AND fecha = '" + fecha + "' GROUP BY zona, sexo ORDER BY zona ASC").getResultList();
            Iterator<Object[]> it = lista.iterator();
            while (it.hasNext()) {
                Object[] obj = it.next();
                if (Integer.parseInt(obj[0].toString()) == 0) {
                    obj[0] = "Masculino";
                } else {
                    if (Integer.parseInt(obj[0].toString()) == 1) {
                        obj[0] = "Femenino";
                    }
                }
                if (Integer.parseInt(obj[2].toString()) == 0) {
                    obj[2] = "NO";
                } else {
                    if (Integer.parseInt(obj[2].toString()) == 1) {
                        obj[2] = "NE";
                    } else {
                        if (Integer.parseInt(obj[2].toString()) == 2) {
                            obj[2] = "SO";
                        } else {
                            if (Integer.parseInt(obj[2].toString()) == 3) {
                                obj[2] = "SE";
                            }
                        }
                    }
                }
            }
            ControladorPrincipal.getInstance().getEntity().getTransaction().commit();
        } catch (Exception e) {
            ControladorPrincipal.getInstance().getEntity().getTransaction().rollback();
        }
        return lista;
    }

    public List<Object[]> zonaSexoPeriodo(Date inicio, Date fin) {
        List<Object[]> lista = null;
        ControladorPrincipal.getInstance().getEntity().getTransaction().begin();
        try {
            lista = ControladorPrincipal.getInstance().getEntity().createNativeQuery("SELECT sexo, count(*), zona FROM caso, nino_adolescente WHERE caso.nino_adolescente_id = nino_adolescente.id  AND fecha BETWEEN '" + inicio + "' AND '" + fin + "' GROUP BY zona, sexo ORDER BY zona ASC").getResultList();
            Iterator<Object[]> it = lista.iterator();
            while (it.hasNext()) {
                Object[] obj = it.next();
                if (Integer.parseInt(obj[0].toString()) == 0) {
                    obj[0] = "Masculino";
                } else {
                    if (Integer.parseInt(obj[0].toString()) == 1) {
                        obj[0] = "Femenino";
                    }
                }
                if (Integer.parseInt(obj[2].toString()) == 0) {
                    obj[2] = "NO";
                } else {
                    if (Integer.parseInt(obj[2].toString()) == 1) {
                        obj[2] = "NE";
                    } else {
                        if (Integer.parseInt(obj[2].toString()) == 2) {
                            obj[2] = "SO";
                        } else {
                            if (Integer.parseInt(obj[2].toString()) == 3) {
                                obj[2] = "SE";
                            }
                        }
                    }
                }
            }
            ControladorPrincipal.getInstance().getEntity().getTransaction().commit();
        } catch (Exception e) {
            ControladorPrincipal.getInstance().getEntity().getTransaction().rollback();
        }
        return lista;
    }

    public List<Object[]> casoAnual(int anio) {
        List<Object[]> lista = null;
        ControladorPrincipal.getInstance().getEntity().getTransaction().begin();
        try {
            lista = ControladorPrincipal.getInstance().getEntity().createNativeQuery("SELECT date_part('month', fecha), count(*) FROM caso WHERE date_part('year', fecha) = " + anio + " GROUP BY date_part('month', fecha) ORDER BY date_part('month', fecha) ASC").getResultList();
            ControladorPrincipal.getInstance().getEntity().getTransaction().commit();
        } catch (Exception e) {
            ControladorPrincipal.getInstance().getEntity().getTransaction().rollback();
        }
        return lista;
    }

    public List<Object[]> casoMotivoAnual(int anio) {
        List<Object[]> lista = null;
        ControladorPrincipal.getInstance().getEntity().getTransaction().begin();
        try {
            lista = ControladorPrincipal.getInstance().getEntity().createNativeQuery("SELECT date_part('month', fecha), motivo, count(*) FROM caso WHERE date_part('year', fecha) = " + anio + " GROUP BY date_part('month', fecha), motivo ORDER BY motivo, date_part('month', fecha) ASC").getResultList();
            Iterator<Object[]> it = lista.iterator();
            while (it.hasNext()) {
                Object[] obj = it.next();
                if (Integer.parseInt(obj[1].toString()) == 1 || Integer.parseInt(obj[1].toString()) == 2) {
                    obj[1] = "Ayuda directa";
                } else {
                    if (Integer.parseInt(obj[1].toString()) == 4 || Integer.parseInt(obj[1].toString()) == 5 || Integer.parseInt(obj[1].toString()) == 6 || Integer.parseInt(obj[1].toString()) == 7) {
                        obj[1] = "Violencia";
                    } else {
                        if (Integer.parseInt(obj[1].toString()) == 8) {
                            obj[1] = "Conductas adictivas";
                        } else {
                            if (Integer.parseInt(obj[1].toString()) == 9) {
                                obj[1] = "Problemas de conducta";
                            } else {
                                if (Integer.parseInt(obj[1].toString()) == 10) {
                                    obj[1] = "Deserción escolar";
                                } else {
                                    if (Integer.parseInt(obj[1].toString()) == 11) {
                                        obj[1] = "Trabajo infantil";
                                    } else {
                                        if (Integer.parseInt(obj[1].toString()) == 12) {
                                            obj[1] = "Situación de calle";
                                        } else {
                                            if (Integer.parseInt(obj[1].toString()) == 13) {
                                                obj[1] = "Otros";
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
            ControladorPrincipal.getInstance().getEntity().getTransaction().commit();
        } catch (Exception e) {
            ControladorPrincipal.getInstance().getEntity().getTransaction().rollback();
        }
        return lista;
    }

    public List<Object[]> casoZonaAnual(int anio) {
        List<Object[]> lista = null;
        ControladorPrincipal.getInstance().getEntity().getTransaction().begin();
        try {
            lista = ControladorPrincipal.getInstance().getEntity().createNativeQuery("SELECT date_part('month', fecha), zona, count(*) FROM caso, nino_adolescente WHERE caso.nino_adolescente_id = nino_adolescente.id AND date_part('year', fecha) = " + anio + " GROUP BY date_part('month', fecha), zona ORDER BY zona, date_part('month', fecha) ASC").getResultList();
            Iterator<Object[]> it = lista.iterator();
            while (it.hasNext()) {
                Object[] obj = it.next();
                if (Integer.parseInt(obj[1].toString()) == 0) {
                    obj[1] = "NO";
                } else {
                    if (Integer.parseInt(obj[1].toString()) == 1) {
                        obj[1] = "NE";
                    } else {
                        if (Integer.parseInt(obj[1].toString()) == 2) {
                            obj[1] = "SO";
                        } else {
                            if (Integer.parseInt(obj[1].toString()) == 3) {
                                obj[1] = "SE";
                            }
                        }
                    }
                }
            }
            ControladorPrincipal.getInstance().getEntity().getTransaction().commit();
        } catch (Exception e) {
            ControladorPrincipal.getInstance().getEntity().getTransaction().rollback();
        }
        return lista;
    }

    public List<Object[]> casoSexoAnual(int anio) {
        List<Object[]> lista = null;
        ControladorPrincipal.getInstance().getEntity().getTransaction().begin();
        try {
            lista = ControladorPrincipal.getInstance().getEntity().createNativeQuery("SELECT date_part('month', fecha), sexo, count(*) FROM caso, nino_adolescente WHERE caso.nino_adolescente_id = nino_adolescente.id AND date_part('year', fecha) = " + anio + " GROUP BY date_part('month', fecha), sexo ORDER BY sexo, date_part('month', fecha) ASC").getResultList();
            Iterator<Object[]> it = lista.iterator();
            while (it.hasNext()) {
                Object[] obj = it.next();
                if (Integer.parseInt(obj[1].toString()) == 0) {
                    obj[1] = "Masculino";
                } else {
                    if (Integer.parseInt(obj[1].toString()) == 1) {
                        obj[1] = "Femenino";
                    }
                }
            }
            ControladorPrincipal.getInstance().getEntity().getTransaction().commit();
        } catch (Exception e) {
            ControladorPrincipal.getInstance().getEntity().getTransaction().rollback();
        }
        return lista;
    }
}
